home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / Mm2_txt / GME.TXT < prev    next >
Encoding:
Text File  |  1997-02-07  |  56.1 KB  |  1,302 lines

  1.                                    Der GME                                     1
  2. ________________________________________________________
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.              Der Golem-Megamax-Editor
  15.  
  16.                                     GME
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.                          Version 1.0 ohne GEM-Fenster
  25.  
  26.                         (C) 1989 by Johannes Leckebusch
  27.  
  28.                         Lizenziert für Megamax Modula-2
  29.                                    Der GME                                     2
  30. ________________________________________________________
  31.  
  32.  
  33. Inhalt
  34.  
  35. 1         Einführung
  36. 1.2       Die wichtigsten Eigenschaften
  37.  
  38. 2.1       Installieren des GME als Shell-Editor
  39.  
  40. 3.1       Eine einfache Programmiersitzung
  41. 3.2       Starten des Editors mit einem Text
  42.  
  43. 4.        Übersicht über alle Befehle des GME
  44. 4.1       Menü "GME"
  45. 4.2       Datei-Menü
  46. 4.3       Block-Menü
  47. 4.4       Marken-Menü
  48. 4.5       Suchen-Menü
  49. 4.6       Editieren-Menü
  50. 4.7       Programm-Menü
  51. 4.8       Reine Tastaturbefehle
  52.  
  53. 5.1       Tastatur konfigurieren
  54. 5.2       Editor mit/ohne GME.GME konfigurieren
  55.  
  56. 6.        Nachwort
  57.                                    Der GME                                     3
  58. ________________________________________________________
  59.  
  60.  
  61. 1.1  Einführung
  62.  
  63. Der  GME  ist  ein  professioneller  Programmeditor.  Er  wurde  aus  dem  G2E
  64. (Golden Two Editor) abgeleitet, der seinerseits ein Nachkomme des legendären
  65. TLGE (The Little Golem Editor) ist.
  66.  
  67. Der  GME  wurde   speziell   an   das   Megamax-Modula-Programmiersystem
  68. angepaßt. Die 1001 Features des G2E wurden einerseits auf das wesentliche
  69. reduziert, andererseits so ergänzt, daß der Editor optimal mit der Shell des
  70. MM2-Systems  zusammenarbeitet.  Die  Benutzerführung  ist  ein  Kompromiß
  71. zwischen allgemeinen GEM- Konventionen (natürlich Mausbedienung!) und den
  72. Eigenheiten eines besonderen Editorkonzeptes.
  73.  
  74.  
  75. 1.2  Die wichtigsten Eigenschaften:
  76.  
  77.         Wertet Fehlermeldungen des MM2-Compilers aus (direkte Anzeige der
  78.         Fehlerposition in der Source, Anzeige der Fehlermeldung im Klartext)
  79.  
  80.         Kann Compiler, Make und Loadtime-Linker starten (offline, das heißt,
  81.         die Dateien werden gespeichert und der Editor verlassen)
  82.  
  83.         Startet  Compiler  (online)  aus  dem  Speicher  (ohne  den  Editor  zu
  84.         verlassen, Compiler liest Text aus dem Speicher)
  85.  
  86.         Fullscreeneditor auch mit seitwärts scrollen, dh. auch Zeilen mit mehr
  87.         als 80 Zeichen können bearbeitet werden
  88.  
  89.         Alle üblichen Grundfunktionen wie Suchen/Tauschen, Block markieren,
  90.         Cut/Copy-Paste oder Block sichern, Block einrücken
  91.  
  92.         Bedienung  über  Maus  und  Tastatur  parallel,  volle  Ausnutzung  der
  93.         Cursor- und Funktionstasten, zusätzlich konfigurierbare Belegung von
  94.         Control- und Alternate-Kombinationen
  95.  
  96.         Lädt  beliebig  viele  Texte  in  den  Speicher  (soweit  Speicher  reicht),
  97.         schnelles   Umschalten   zwischen   Vorder-   und   Hintergrundtext,
  98.         Übernehmen von Textteilen aus einem Text in einen anderen, direktes
  99.         Compilieren des jeweils angezeigten Textes aus dem Speicher
  100.  
  101.         Abspeichern  der  Konfiguration  (Autoindent,  Overwrite/Insert,  Wort-
  102.         oder   Mustersuche   usw.),   wahlweise   Abspeichern   der   aktuellen
  103.         Textpositionen und Merkpositionen in Zusatzdatei zu jedem Text
  104.                                    Der GME                                     4
  105. ________________________________________________________
  106.  
  107.  
  108. 2.1 Installieren des GME als Shell-Editor
  109.  
  110. Um mit dem Editor arbeiten zu können, sollte dieser in der Shell installiert
  111. werden. Dies geschieht einfach durch Anmelden des Editors als Arbeitseditor
  112. (Eintragen  des  Namens  "GME"  in  den  Shell-Parametern  für  den  Editor).
  113. Weitere Parameter: Shell braucht weder für den Editor nach den Sourcen zu
  114. suchen  noch  die  Fehlermeldung  nach  einem  Compiler-Fehler  anzuzeigen.
  115. Temporäre Dateien sind nicht nötig, in der Argumentzeile können alle Infor~
  116. mationen übergeben werden. Vorteilhaft ist es, den Editor resident zu laden
  117. (sofern genügend Speicher vorhanden ist) - das geschieht durch die Anweisung
  118. "Load GME" in der Batch-Datei (üblicherweise "MM2SHELL.M2B").
  119.  
  120. Zum Editor gehört das Resource-File "GMEMENUE.RSC", das sich im gleichen
  121. Ordner  wie  die  Shell  oder  auf  einem  der  in  DefaultPath  (s.  Shell-Batch)
  122. eingetragenen Pfade befinden sollte.
  123.                                    Der GME                                     5
  124. ________________________________________________________
  125.  
  126.  
  127. 3.1 Eine einfache Programmiersitzung
  128.  
  129. Um ein Programm einzugeben, zu compilieren (in Maschinenkode übersetzen)
  130. und von Textfehlern zu befreien, brauchen Sie den Editor nicht zu verlassen.
  131. Auch  nicht,  um  verschiedene  Module,  die  eventuell  zu  einem  Programm
  132. gehören, zu bearbeiten. Doch fangen wir mit dem einfachsten Fall an.
  133.  
  134. Wenn Sie ein neues Programm eingeben wollen, also keine vorhandene Datei
  135. bearbeitet werden soll, ist eine neue, leere Arbeitsdatei anzulegen (mit Taste
  136. N) oder ein Leername bei einer bestehenden Arbeitsdatei oder der aktuellen
  137. Datei einzugeben. Starten Sie den Editor durch E (für die Arbeitsdatei) bzw.
  138. Control-E (wenn Sie die 'aktuelle Datei' bearbeiten wollen).
  139.  
  140. Bild 1
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149. Der Editor ist, wenn  er  resident  geladen  wurde,  nach  etwa  1,5  Sekunden
  150. arbeitsbereit. Er zeigt die GEM-Menüleiste (in Bild 1 und den folgenden), einen
  151. grauen Balken und darunter, schwarz unterlegt, die Statuszeile. In dieser Zeile
  152. wird normalerweise die Anzahl Zeilen der Datei nach "ZL" angezeigt, danach
  153. die Zeile, in der sich der Cursor befindet, die Spalte und der Arbeitsmodus
  154. (Einfügen oder Überschreiben, Indent  oder  keine  Anzeige  für  die  halbauto~
  155. matische  Einrückung).  In  bestimmten  Situationen  erscheinen  auch  andere
  156. Meldungen  in  dieser  Zeile,  wie  zum  Beispiel  "Compiler  läuft..."  oder  eine
  157. Fehlermeldung (siehe unten). In Bild 1 sehen Sie ein Rufzeichen, das andeutet,
  158. daß der Text bearbeitet wurde und in dieser Fassung noch nicht gesichert ist.
  159. Besitzt  der  Text  bereits  einen  Dateinamen,  unter  dem  er  gesichert  oder
  160. geladen  wurde,  so  wird  auch  dieser  zusammen  mit  dem  gesamten  Pfad
  161. angezeigt.
  162.  
  163. Bild 2
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Geben Sie nun den in Bild 1 zu erkennenden Programmtext ein. Dann wählen
  171. Sie im Programm-Menü den Eintrag "Compilieren" (Bild 2). Sie können statt
  172. dessen  auch  Alternate-D  drücken,  also  die  Alternate-Taste  festhalten  und
  173. dann D. Dies wird durch die Raute und das D im Menüeintrag angezeigt. Ein
  174.                                    Der GME                                     6
  175. ________________________________________________________
  176.  
  177.  
  178. "^" in der Tastenbezeichnung bedeutet die Control-Taste, ein kleines "s" die
  179. Shift-Taste. Einige der Tastenbefehle können je nach Konfiguration verschieden
  180. sein, beachten Sie die Anzeige in der GEM-Menüleiste.
  181.  
  182. Bild 3
  183.  
  184.  
  185.  
  186. Es erscheint sofort die Anzeige "Compiler läuft" in der Statuszeile (Bild 3).
  187. Diese Anzeige bleibt so lange  erhalten,  wie  der  Compiler  zur  Übersetzung
  188. braucht oder bis er einen Fehler findet. In unserem Fall (Bild 4) erscheint sehr
  189. rasch eine Fehlermeldung und der Cursor springt auf den ersten Buchstaben
  190. des inkriminierten "Bezeichners".
  191.  
  192. Bild 4
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199. Der Compiler kennt das Wort "WriteString" nicht. Das liegt daran, daß Modula
  200. eine bibliotheksorientierte Sprache ist - alle Ein-/Ausgabeprozeduren müssen
  201. aus einer geeigneten Library "importiert" werden.
  202.  
  203. Bild 5
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.     Beachte:  Bei  der  Bearbeitung  von  umfangreichen  Texten  kann  es
  215.     vorkommen, daß Sie die letzte Fehlermeldung noch einmal anschauen
  216.     wollen.  Sobald  Sie  die  Fehlerzeile  mit  dem  Cursor  verlassen,
  217.     verschwindet die Fehlermeldung jedoch aus der Anzeige der Statuszeile.
  218.     Rufen Sie einfach den Befehl "Zur Fehlermeldung" (Bild 5) auf. Der
  219.     Cursor  springt  wieder  an  die  Fehlerstelle,  und  diese  wird  erneut
  220.     angezeigt.  Dies  ist  so  lange  möglich,  wie  kein  neuer  Compilerlauf
  221.     stattgefunden hat (der entweder einen anderen Fehler meldet oder das
  222.     Programm fehlerfrei übersetzt).
  223.                                    Der GME                                     7
  224. ________________________________________________________
  225.  
  226.  
  227.  
  228. Bld 6
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236. Tragen Sie nun die in Bild 6 gezeigte "FROM...IMPORT"-Anweisung nach. Wenn
  237. Sie keinen weiteren Fehler gemacht haben, so erscheint nach einem  neuen
  238. Compilerlauf  die  Anzeige  des  Pfades,  auf  den  die  übersetzte  Codedatei
  239. geschrieben wurde, sowie deren Länge in Bytes.
  240.  
  241. Bild 7
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255. Wenn Sie den Editor verlassen wollen, geben Sie (Bild 7) den "Beenden"-Befehl
  256. ein (es gibt noch andere, eventuell elegantere Möglichkeiten,  den  Editor  zu
  257. verlassen,  die  in  der  Gesamtübersicht  des  Datei-Menüs  weiter  unten
  258. beschrieben werden). Statt dessen können Sie auch Alternate-X drücken.
  259.  
  260. Bild 8
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. Der GME wacht sorgfältig darüber, daß keine Arbeit verlorengeht. Obwohl Sie
  269. ihm keinen Auftrag gegeben haben, den soeben eingegebenen Text (der sich
  270. bisher nur im Speicher befindet!) zu sichern, ermahnt er Sie (Bild  8),  ihn
  271. zu speichern. Sie haben hier drei Möglichkeiten. Zunächst einmal erkennen Sie
  272. an der Anzeige Text "" editiert! , daß der Text noch keinen Dateinamen besitzt
  273. - dieser würde nämlich  sonst  zwischen  den  Anführungszeichen  erscheinen.
  274.                                    Der GME                                     8
  275. ________________________________________________________
  276.  
  277.  
  278. Klicken sie auf JA (oder drücken Sie die Return-Taste, da dies der Default~
  279. button ist - erkennbar an der dickeren Umrandung), so wird der Editor den
  280. Text ungefragt speichern - sofern er den Dateinamen schon kennt. In diesem
  281. Fall würde allerdings die Filebox erscheinen und die Eingabe eines Dateinamens
  282. verlangen (Bild 9). Möchten Sie den Text nicht unter dem angezeigten Namen
  283. speichern, oder wollen Sie überhaupt in den Editor zurück, so klicken Sie auf
  284. ABBRUCH. Falls Sie aber auf NEIN klicken, wird der Text gelöscht und der
  285. Editor verlassen.
  286.  
  287.     Genaugenommen   wird   die   im   Speicher   befindliche   Textversion
  288.     verworfen. Sollte der Text bereits früher gesichert worden sein, so
  289.     wird diese Datei natürlich nicht gelöscht!
  290.  
  291. Bild 9
  292.                                    Der GME                                     9
  293. ________________________________________________________
  294.  
  295.  
  296. 3.2 Starten des Editors mit einem Text
  297.  
  298. Der Editor kann auf verschiedene  Weise  bereits  mit  einem  Text  gestartet
  299. werden, den er automatisch lädt und anzeigt. Beispielsweise können Sie aus
  300. einem der Fenster in der Shell einfach mit der Maus einen Textnamen auf das
  301. Editor-Icon  "ziehen".  Ziehen  Sie  einen  Textnamen  statt  dessen  auf  den
  302. Compiler, so wird der Text übersetzt. Wenn dabei ein Fehler erkannt wird,
  303. startet  die  Shell  anschließend  automatisch  den  Editor  mit  diesem  Text,
  304. natürlich wird dabei auch sogleich die Fehlerstelle angezeigt. Die weitere Arbeit
  305. geschieht wie oben beschrieben, dh. Sie können z. B. den Fehler korrigieren
  306. und  zur  Kontrolle  aus  dem  Speicher  compilieren.  Da  der  Text  bearbeitet
  307. wurde, achtet der Editor automatisch darauf, daß Sie die veränderte Fassung
  308. abspeichern - oder willkürlich verwerfen.
  309.  
  310.     Beachte: Beim Compilieren  aus  dem  Speicher  dürfen  keine  Include-
  311.     Anweisungen  im  Programmtext  stehen,  in  diesem  Fall  kommt  eine
  312.     Fehlermeldung. Sie müssen solche Quellen offline compilieren, also mit
  313.     dem Befehl "Ende & Comp." im Programm-Menü. Dabei werden alle
  314.     bearbeiteten  Texte  vorher  abgespeichert  und  der  Editor  verlassen,
  315.     danach startet automatisch der Compiler.
  316.                                    Der GME                                    10
  317. ________________________________________________________
  318.  
  319.  
  320. 4. Übersicht über alle Befehle in der GEM-Menüleiste
  321.  
  322. Im folgenden finden Sie eine Übersicht der Editorbefehle in der Ordnung, wie
  323. sie in der GEM-Menüleiste erscheinen. Der Editor besitzt über 100 Befehle, die
  324. meisten davon werden in der Menüleiste aufgeführt. Fast alle Befehle können
  325. außerdem  über   Funktionstasten   oder/und   Steuerzeichenfolgen   ausgelöst
  326. werden.  Wir  sprechen  im  folgenden  immer  beispielsweise  von  dem  Befehl
  327. "Sichern" (s. unten), wobei es gleichgültig ist, ob dieser durch Anklicken der
  328. betreffenden Menüleiste, durch Eingabe der dort angezeigten Tastenkombination
  329. oder durch eine Funktionstaste ausgelöst wird.
  330.  
  331.     Beachte: Die Befehle werden wie folgt notiert (Beispiele aus dem Menü
  332.     "Editieren" u. "Programm"):
  333.  
  334.         Insert:     Taste "Insert"
  335.         sInsert:    Taste "Insert" mit festgehaltener Shift-Taste
  336.         ^J:         Taste "J" mit festgehaltener Control-Taste
  337.          Raute D: Taste "D" mit festgehaltener Alternate-Taste
  338.  
  339. Die Steuerzeichenfolgen orientieren sich an Wordstar beziehungsweise an den
  340. Turbo-Editoren von Borland, jedoch ist der GME weitaus  komfortabler.  Alle
  341. wichtigen Befehle sind jedoch über Funktionstasten (Cursortasten) erreichbar,
  342. auch  können  die  Steuertasten-  und  Funktionstasten-Zuordnungen  geändert
  343. werden (siehe Abschnitt "Anpassen der Tastaturbelegung").
  344.  
  345.     Beachte: Falls in den Menüs Ihres Editors andere Tastenabkürzungen
  346.     für  die  Befehle  angezeigt  werden,  haben  Sie  einen  abweichend
  347.     konfigurierten Editor erhalten. Falls Sie selbst die Tastaturbelegung der
  348.     Befehle  ändern,  müssen  Sie  die  entsprechende  Anzeige  mit  dem
  349.     KResource-Programm   "NRSC_ASH.PRG"   selbst   im   Resource-File
  350.     nachtragen (falls Sie dies wünschen).
  351.                                    Der GME                                     11
  352. ________________________________________________________
  353.  
  354.  
  355. 4.1 Menü "GME"
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368. Der erste Eintrag ruft eine Box mit der Copyright-Anzeige des Editors und der
  369. Versionsnummer. Eventuelle weitere Einträge sind für Accessories vorgesehen.
  370.  
  371.     Sollten Sie Probleme mit oder Fragen zu Ihrem GME haben, so ist es
  372.     nützlich,  stets  die  Versionsnummer  anzugeben.  Sollte  diese  durch
  373.     Manipulieren der Resource-Datei verändert sein, so gilt im Zweifelsfalle
  374.     die beim Laden oder Speichern in der Statuszeile angezeigte Version!
  375.     Diese ist fest im Programmcode enthalten.
  376.                                    Der GME                                    12
  377. ________________________________________________________
  378.  
  379.  
  380. 4.2 Das Datei-Menü
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391. Das Datei-Menü enthält alle Befehle zum Laden und Speichern von  Texten.
  392. Wenn  der  Editor  infolge  eines  Übersetzungsfehlers  gestartet  wird  oder
  393. dadurch, daß man das Icon einer Textdatei auf das Editor-Icon schiebt, lädt er
  394. automatisch den betreffenden Text. Unabhängig davon können jederzeit weitere
  395. Texte geladen werden. Alle Texte befinden sich gleichzeitig im Speicher (dieser
  396. muß ausreichend groß sein). Von einem Text zum anderen gelangen Sie über
  397. das "Editieren"-Menü (siehe unten).
  398.  
  399. Die ersten beiden Einträge, von denen einer mit einem Häkchen gekennzeichnet
  400. ist, stellen "Schalter" dar. Schalter sind stets die ersten Einträge in einem
  401. Menü (in Datei, Block, Suchen und Editieren).
  402.  
  403.     Beachte: Die Häkchen-Einstellungen können mit dem -->  "Parameter
  404.     sichern"-Befehl in die Datei GME.GME gespeichert werden, so daß sie
  405.     beim nächsten Start des  Editors  automatisch  wiederkehren  -  siehe
  406.     unten!
  407.  
  408.                                 Neu
  409.  
  410. Es wird ein neuer Text im Speicher angelegt. Damit können Sie jederzeit, auch
  411. wenn der Editor bereits mehrere Programmdateien geladen hat, den Entwurf
  412. eines neuen Programm-Moduls beginnen. Es erscheint  ein  leerer  Bildschirm
  413. (die anderen Texte sind nach wie vor vorhanden, siehe Menü "Editieren"). Dazu
  414. wird  ein  neuer  "Textpuffer"  angelegt.  Siehe  auch  -->  Schließen.  Beim
  415. Verlassen des  Editors  oder  bei  Eingabe  eines  Sicherungs-Befehls  wird  die
  416. Eingabe eines Dateinamens verlangt.
  417.  
  418.                               Öffnen...
  419.  
  420. Es wird eine neue Datei geladen, dh. es erscheint die Filebox. Wählen Sie die
  421. gewünschte Datei aus oder klicken Sie auf Abbruch (in diesem Fall verbleibt
  422. ein leerer Textpuffer, der eventuell beim nächsten Öffnen-Befehl  verwendet
  423. wird). Auf jeden Fall bleiben vorher im Editor geladene Texte erhalten - siehe
  424. Menü "Editieren". Beachten Sie, daß nur so viele und so lange Texte geladen
  425.                                    Der GME                                    13
  426. ________________________________________________________
  427.  
  428.  
  429. werden  können,  wie  der  noch  freie  verfügbare  Arbeitsspeicher  Ihres
  430. Computers erlaubt. Kann eine Datei nicht mehr vollständig geladen werden, so
  431. erscheint eine Fehlermeldung ("Speicher reicht nicht"). In so einem Fall sollten
  432. Sie unbedingt andere Texte löschen (--> Schließen), ehe Sie weiterarbeiten und
  433. die betreffende Datei neu laden.
  434.  
  435.     Beachte:  Der  GME  benutzt  eine  sehr  flexible  interne  Speicher~
  436.     verwaltung.  Dadurch  kann  er  beliebig  viele  Texte  "durcheinander"
  437.     verwalten, die sich den Arbeitsspeicher je nach Bedarf teilen - dh. ein
  438.     Text kann sehr groß, ein anderer sehr klein sein, der gesamte freie
  439.     Speicher  steht  potentiell  allen  Texten  zur  Verfügung.  Mit  anderen
  440.     Worten:  Es  gibt  keine  feste  Aufteilung  des  freien  Speichers  in  n
  441.     gleichgroße  Abschnitte  oder  dergleichen.  Allerdings  hat  dies  zur
  442.     Konsequenz, daß die Texte im Speicher mehr Platz brauchen, als dies
  443.     ihrer Länge auf Diskette entspricht (besonders dann, wenn die Texte
  444.     sehr viele kurze Zeilen enthalten).
  445.  
  446.                              Einfügen...
  447.  
  448. Eine Disk- oder Festplattendatei wird in den gerade bearbeiteten Text ab der
  449. aktuellen Cursorposition eingefügt. Sie erscheint dort als markierter Block (und
  450. kann mit den --> Block-Befehlen im Clipboard gemerkt werden).
  451.  
  452.                               Sichern
  453.  
  454. Der gerade bearbeitete Text wird unter dem schon vorhandenen Dateinamen
  455. gespeichert (es wird eine .BAK-Datei angelegt, außer wenn diese Betriebsart
  456. abgeschaltet  ist  -->  "Backup  anlegen"  oben).  Wurde  noch  kein  Dateiname
  457. vergeben, so fragt der Editor durch Anzeige der Filebox danach.
  458.  
  459.                           Sichern als...
  460.  
  461. Es wird in jedem Fall die Filebox angezeigt, so daß man einen abweichenden
  462. Dateinamen angeben kann. Bei Return wird der vorgewählte Dateiname benutzt.
  463. Fehlt dieser oder klickt man auf ABBRUCH, so wird die Datei nicht gesichert.
  464.  
  465.                          Block sichern...
  466.  
  467. Es wird ein markierter Block als Datei herausgeschrieben, der Dateiname wird
  468. abgefragt. Wenn kein Block markiert ist, erscheint eine Alarmbox.
  469.  
  470.                              Schließen
  471.  
  472. Ein Textpuffer soll aus dem Speicher entfernt werden. Wenn der Text seit der
  473. letzten Sicherung verändert wurde, wird  automatisch  die  Sequenz  "Sichern
  474. als..." vorgeschaltet, danach wird der Textpuffer gelöscht und entfernt (der
  475.                                    Der GME                                    14
  476. ________________________________________________________
  477.  
  478.  
  479. letzte Puffer kann nicht entfernt werden, dh. es muß immer mindestens einen
  480. Textpuffer geben solange der Editor läuft). Wenn der Puffer editiert wurde
  481. und nicht gespeichert wird, kann er nicht entfernt werden.
  482.  
  483.                       Konfiguration speichern
  484.  
  485. Je nachdem, ob dieser Eintrag mit einem Häkchen gekennzeichnet  ist  oder
  486. nicht, wird zu einem Text der Form "DATEI.M" eine Zusatzdatei "DATEI.GME"
  487. gespeichert,  die  individuelle  Einstellungen,  Cursor-  und  Merkpositionen  etc.
  488. enthält. Durch Anklicken dieses Eintrags wird das Häkchen ein-  oder  aus~
  489. geschaltet.
  490.  
  491.         Beachte: Wenn Sie, damit der Editor schneller startet, keine GME.GME-
  492.         Datei verwenden wollen, können Sie die Voreinstellungen  beim  Start
  493.         des Editors auch im Modul GMEConfig ("GMECONFI.I") ändern, wie im
  494.         Abschnitt 5.2 beschrieben.
  495.  
  496.                           Backup anlegen
  497.  
  498. Je nachdem, ob dieser Eintrag mit einem Häkchen gekennzeichnet  ist  oder
  499. nicht, wird  beim  Sichern  eines  Textes  DATEI.XXX  eine  alte  Datei  gleichen
  500. Namens in DATEI.BAK umbenannt (die alte .BAK-Datei geht verloren).
  501.  
  502.                        Einstellungen sichern
  503.  
  504. Es  werden  die  aktuellen  Einstellungen  (Häkchen!)  in  der  Datei  GME.GME
  505. gesichert (und zwar die Werte, die für den gerade angezeigten Text eingestellt
  506. sind). Beim nächsten Start des Editors ist dies die Standard-Voreinstellung
  507. aller  Parameter.  Für  Tastaturbelegungen  siehe  Abschnitt  "Tastatur  konfi~
  508. gurieren" unten.
  509.  
  510.                               Beenden
  511.  
  512. Verlassen  des  Editors,  ohne  Dateien  zu  speichern.  Falls  jedoch  Texte
  513. bearbeitet  wurden,  verlangt  der  Editor  zur  Sicherheit  das  Speichern  oder
  514. ausdrückliche Verwerfen der Texte, siehe Bild 8 oben.
  515.                                    Der GME                                    15
  516. ________________________________________________________
  517.  
  518.  
  519. 4.3 Das Block-Menü
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529. Das Block-Menü enthält Befehle, mit denen Textabschnitte gemerkt, kopiert,
  530. verschoben, gelöscht oder in andere Texte übertragen werden können. Dabei
  531. wird  das  Copy/Cut  &  Paste-Konzept  nach  dem  Vorbild  des  Macintosh
  532. angewandt (mit kleinen Abweichungen).  Das  bedeutet  grundsätzlich  folgende
  533. Befehlsfolge:
  534.  
  535. (1)     Textabschnitt  mit  der  Maus,   Tastenbefehlen   oder   Menübefehlen
  536.         markieren. Der "Block" erscheint auf dem Bildschirm hervorgehoben.
  537.  
  538. (2)     Nun wird der Block gemerkt, indem man ihn ins "Klemmbrett" (eine Art
  539.         Notizblatt oder Pinwand) ablegt - dabei kann er aus dem aktuellen Text
  540.         an der alten Position "ausgeschnitten" werden, oder es wird lediglich
  541.         eine Kopie angefertigt (Merken).
  542.  
  543. (3)     Schließlich kann der Block an anderer Stelle wieder eingefügt werden -
  544.         auch  in  einen  anderen  Text  (siehe  -->  "Nächster  Text"  im  Menü
  545.         "Editieren")
  546.  
  547. Wenn Sie sich Bild 12 ansehen, fallen zwei Dinge auf:
  548.  
  549. *       Der Schalter "GEM-Klemmbrett" hat kein Häkchen
  550. *       Der Eintrag "Einfügen" ist gesperrt (Schattenschrift)
  551.  
  552. Wenn wir den Schalter zunächst ignorieren, bedeutet dies, daß sich derzeit
  553. nichts auf dem Schwarzen  Brett  (Klemmbrett  oder  Clipboard)  befindet.  Es
  554. kann daher nichts in den Text eingefügt werden. Erst nach einem der Befehle
  555. "Ausschneiden" oder "Merken" wird der Befehl "Einfügen"  verfügbar.  Zuvor
  556. muß  aber  ein  Block  markiert  werden  (-->  Anfang  markieren,  -->  Ende
  557. markieren etc., s. unten).
  558.  
  559. Normalerweise ist das "Klemmbrett" ein verdeckter Textpuffer, wird also im
  560. Speicher verwaltet (siehe --> "Block Editieren" unten). Einer GEM-Konvention
  561. zufolge  kann  man  dieses  Klemmbrett  auch  über  sogenannte  Scrap-Dateien
  562. (wörtlich:  Kritzelblock  oder  Schmiertafel)  mit  anderen  Programmen  (meist
  563. Accessories) austauschen. Der GME ist für diese Konvention vorbereitet.
  564.                                    Der GME                                    16
  565. ________________________________________________________
  566.  
  567.  
  568. Wenn  Sie  den  Schalter  "GEM-Klemmbrett"  auf  EIN  stellen  (mit  Häkchen
  569. versehen),  werden  gemerkte  oder  ausgeschnittene  Blöcke  in  eine  Datei
  570. geschrieben, die sich in einem Ordner "CLIPBRD" befindet. Der GME verwendet
  571. hier   den   Dateinamen   SCRAP.TXT,   der   vollständige   Pfad   lautet   also
  572. "C:üCLIPBRDüSCRAP.TXT" (ersatzweise auch "A:üCLIPBRDüSCRAP.TXT"). Bei
  573. einem "Einfügen" versucht der GME also in jedem Fall, diese Datei bei der
  574. aktuellen Cursorposition in den gerade angezeigten Text einzufügen. Ist kein
  575. solcher Text vorhanden bzw. der Pfad nicht zu finden, erscheint eine Alarmbox
  576. mit der Meldung "Das Klemmbrett ist leer".
  577.  
  578.                           GEM-Klemmbrett
  579.  
  580. Ein-  und  Ausschalten  des  GEM-Clipboard-Mechanismus  (Datei  zum  Daten~
  581. tausch mit anderen Programmen, siehe voriger Abschnitt).
  582.  
  583.                            Ausschneiden
  584.  
  585. Ein  markierter  Block  wird  aus  dem  Text  entfernt  ("ausgeschnitten")  und
  586. gemerkt.
  587.  
  588.                               Merken
  589.  
  590. Ein markierter Block wird lediglich in das Klemmbrett kopiert und zur weiteren
  591. Verwendung aufbewahrt.
  592.  
  593.                              Einfügen
  594.  
  595. Ein  vorher  gemerkter  Text  (-->  "Ausschneiden",  "Merken")  wird  an  der
  596. aktuellen Cursorposition in den angezeigten Text eingefügt.
  597.  
  598.                              Editieren
  599.  
  600. Mit  diesem  Befehl  gelangen  Sie  in  den  normalerweise  unzugänglichen
  601. Klemmbrett-Puffer und können diesen wie einen gewöhnlichen Text editieren.
  602. Ein  späterer  Befehl  -->  "Einfügen"  wird  den  so  veränderten  Inhalt  des
  603. schwarzen Brettes ab der aktuellen Cursorposition in den Text einfügen, der
  604. gerade angezeigt wird. In die normale Textbearbeitung kommen Sie mit dem
  605. --> "Beenden"-Befehl (Menü Datei) oder der Esc(ape)-Taste zurück.
  606.  
  607.                          Anfang markieren
  608.  
  609. Festlegen  eines  Blockanfangs.  Bringen  Sie  zuvor  den  Cursor  auf  die
  610. gewünschte Anfangsposition. Geht auch mit Mausklick (linke Taste).
  611.                                    Der GME                                    17
  612. ________________________________________________________
  613.  
  614.  
  615.                           Ende markieren
  616.  
  617. Festlegen eines Blockendes. Bringen Sie zuvor den Cursor auf die gewünschte
  618. Endposition.  Der  Textabschnitt  wird  anschließend  hervorgehoben  dargestellt.
  619. Danach sollten Sie einen der Befehle --> "Ausschneiden" oder --> "Merken"
  620. wählen. Geht auch mit Mausklick (Shift und linke Taste oder mit der rechten
  621. Maustaste).
  622.  
  623.                           Zeile markieren
  624.  
  625. Es wird die Zeile, in der sich der Cursor befindet, als Block markiert.
  626.  
  627.                           Alles markieren
  628.  
  629. Es wird der gesamte Text, der gerade angezeigt ist, als Block markiert.
  630.  
  631.     Bemerkung: Es gibt einen weiteren Befehl, der nicht in der Menüleiste
  632.     aufscheint: Blockmarken aufheben (Standardeinstellung ^KH).
  633.                                    Der GME                                    18
  634. ________________________________________________________
  635.  
  636.  
  637. 4.4 Das Marken-Menü
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646. Marken erleichtern die Orientierung in einem Text. Der GME erlaubt es, in
  647. jedem  im  Speicher  befindlichen  Text  unabhängig  von  den  anderen  drei
  648. "Benutzermarken" zu setzen. Er merkt sich deren Position, solange die Texte
  649. bearbeitet werden (beim Abspeichern mit --> "Konfiguration  speichern"  EIN
  650. auch in einer Zusatzdatei). Zusätzlich merkt er sich zu jedem Text die aktuelle
  651. Cursorposition, die zuletzt editierte Textstelle und die letzte Compilerfehler~
  652. meldung. Das kann besonders nützlich sein, wenn man in mehreren Modulen
  653. Compilerfehler  erhält,  die  vielleicht  eine  gemeinsame  Ursache  haben.  Oder
  654. wenn Sie bei der Erstellung eines Programms mehrfach bestimmte Stellen in
  655. verschiedenen Quelltexten von Bibliotheksmodulen nachschauen wollen.
  656.  
  657.                         Setze Marke 1 bis 3
  658.  
  659. Die augenblickliche Cursorposition im angezeigten Text wird gemerkt.
  660.  
  661.                          Zu Marke 1 bis 3
  662.  
  663. Der Cursor springt auf die gemerkte Stelle im jeweiligen Text. Wurde keine
  664. Stelle gemerkt, springt er an den Textanfang.
  665.  
  666.                             Zu Zeile...
  667.  
  668. Der  Editor  verlangt  die  Eingabe  einer  Zeilennummer  und  springt  dann  zu
  669. dieser. Ist die Zeilennummer zu groß, springt er  an  das  Textende.  Dieser
  670. Befehl ist oft nützlich, wenn man eine Textstelle "ungefähr im zweiten Drittel
  671. der Source" sucht, oder wenn ein Mitprogrammierer sagt: "Ändere mal den
  672. Befehl in Zeile 345 folgendermaßen...".
  673.  
  674.                           Letzte Position
  675.  
  676. Der Cursor springt auf die zuletzt editierte Position im angezeigten Text.
  677.  
  678.                          Zur Fehlermeldung
  679.  
  680. Der Cursor springt auf die zuletzt vom Compiler gemeldete Fehlerstelle und
  681. zeigt die Fehlermeldung an. Gibt es keine solche, springt er an den Textanfang
  682. und  es  erscheint  lediglich  die  Meldung  "Compilerinfo"  oder  die  Daten  der
  683. übersetzten Codedatei.
  684.                                    Der GME                                    19
  685. ________________________________________________________
  686.  
  687.  
  688. 4.5 Das Suchmenü
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698. Ein Editor ohne komfortable Suchbefehle ist heute undenkbar. Der GME ist mit
  699. einem  modernen  Suchalgorithmus  ausgestattet,  der  einen  Begriff  um  so
  700. schneller findet, je länger er ist (vielleicht im Gegensatz zu dem, was man
  701. intuitiv erwarten möchte  -  bei  sehr  langen  Quellen  können  Sie  sich  diese
  702. Eigenschaft  gegebenenfalls  zunutze  machen).  Selbstverständlich  kann  man
  703. vorwärts und rückwärts suchen, und man kann bestimmen, ob ein Begriff mit
  704. oder  ohne  Berücksichtigung  der  Groß-/Kleinschreibung  (in  Modula  sehr
  705. wichtig!), ob als Teilwort oder nur als ganzes Wort gefunden  werden  soll.
  706. Natürlich läßt sich ein Suchbegriff auch gegen einen anderen tauschen, und
  707. schließlich gibt es die Möglichkeit, das gerade rechts vom Cursor befindliche
  708. Wort auch an anderer Stelle ausfindig zu machen.
  709.  
  710.     Beachte: Der GME kann nur Suchbegriffe finden, die vollständig in einer
  711.     Zeile  stehen.  Er  kann  auch  nicht  Zeilenenden  in  den  Suchbegriff
  712.     aufnehmen.  Diese  Beschränkungen  werden  eventuell  in  künftigen
  713.     Versionen   aufgehoben.   Aufgrund   der   Eigenart   des   optimierten
  714.     Suchverfahrens  funktioniert  die  Suche  "rückwärts"  nur  zwischen
  715.     verschiedenen Zeilen - derselbe Suchbegriff innerhalb einer Zeile wird
  716.     also nicht "rückwärts" gefunden. Gehen Sie ggf. in die vorige Zeile.
  717.  
  718.                             Wort suchen
  719.  
  720. Dieser  Schalter  bestimmt,  ob  nur  ein  vollständiges  Wort  (Donaudampf~
  721. schiffahrtskapitän wird nicht gefunden, wenn man Donau oder Dampf sucht)
  722. oder auch ein Teilwort (Muster) gefunden wird.
  723.  
  724.                             Grossklein
  725.  
  726. Dieser  Schalter  bestimmt,  ob  der  Suchvorgang  Groß-  und  Kleinschreibung
  727. unterscheidet.  Wenn  Sie  also  nicht  genau  wissen,  wie  der  Suchbegriff
  728. geschrieben  wird,  stellen  Sie  am  besten  beide  Schalter  auf  AUS  (kein
  729. Häkchen). Ist es aber lästig, daß "Donau" bei allen Wortkombinationen fündig
  730. wird, stellen Sie zumindest "Wort suchen" auf EIN.
  731.                                    Der GME                                    20
  732. ________________________________________________________
  733.  
  734.  
  735.                              Suchen...
  736.  
  737. Es  wird  ein  Suchbegriff  abgefragt.  Wurde  früher  bereits  ein  Suchbegriff
  738. eingegeben, wird dieser angeboten (und mit Return oder Pfeil-Nach-Oben oder
  739. -Unten  übernommen).  Er  kann  mit  allen  in  einer  Zeile  wirksamen  Tasten
  740. (Backspace, Cursor, Delete) editiert werden. Mit  Esc(ape)  löschen  Sie  den
  741. alten Suchbegriff und können einen neuen eingeben.
  742.  
  743. Schließen Sie den Suchbegriff mit Return oder Pfeil-Nach-Unten ab, so wird
  744. vorwärts gesucht. Um rückwärts zu suchen, schließen Sie die  Eingabe  mit
  745. Pfeil-Nach-Oben ab.
  746.  
  747.                             Tauschen...
  748.  
  749. Auf die Abfrage des Suchbegriffs erfolgt in gleicher Weise die Abfrage des
  750. Wortes, gegen welches dieser getauscht werden soll. VORSICHT, wenn "Wort
  751. suchen" und "Grossklein" ausgeschaltet sind!
  752.  
  753. Nach  der  Eingabe  eines  Such-  oder  Tauschbegriffes  erfolgt  eine  Abfrage
  754. verschiedener  Optionen  (einmal  Suchen,  letztes  Vorkommen  oder  eine
  755. bestimmte Anzahl von Malen suchen).
  756.  
  757.                              Pick-Wort
  758.  
  759. Entspricht --> "Suchen..." (s. o.), jedoch wird das Wort ab der Cursorposition
  760. als Vorgabe präsentiert. Die Suche beginnt automatisch am Textanfang, man
  761. findet also zunächst das erste Vorkommen des Wortes im Text.
  762.  
  763.                            Pick-Tauschen
  764.  
  765. Wie Pick-Wort, jedoch wird auch ein Tauschbegriff abgefragt.
  766.  
  767.                           Nochmal suchen
  768.  
  769. Der letzte Suchbegriff wird erneut gesucht (nächstes Vorkommen).
  770.                                    Der GME                                    21
  771. ________________________________________________________
  772.  
  773.  
  774. 4.6 Das Editieren-Menü
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784. In diesem Menü werden einige allgemeine Bearbeitungsweisen eingestellt. Dazu
  785. kommen ein paar Befehle, die für den GME eigentümlich sind. Dieser Editor
  786. kann beliebig viele Texte im Speicher verwalten, zwischen denen man beliebig
  787. hin- und herspringen und Textblöcke tauschen kann. Er ist dabei nicht an eine
  788. bestimmte  Anzahl  von  Fenstern  oder  Puffern  gebunden  -  die  Anzahl
  789. beziehungsweise  der  Gesamtumfang  der  Texte  wird  lediglich  durch  den
  790. verfügbaren  (freien)  Arbeitsspeicher  Ihres  Computers  beschränkt.  Diese
  791. Eigenschaft unterscheidet ihn von fast allen anderen Editoren, die entweder
  792. nur so viele Texte editieren können, wie GEM-Fenster verfügbar sind, oder die
  793. sonst eine willkürliche Beschränkung aufweisen. Natürlich ist es richtig, daß
  794. man im Normalfall nicht 10, 20 oder 50 Texte gleichzeitig im Speicher braucht
  795. - aber jede willkürliche Grenze kann sich als lästig erweisen.
  796.  
  797.                            Überschreiben
  798.  
  799. Dieser Schalter bestimmt, ob der Editor im Einfüge- oder Überschreibmodus
  800. arbeitet. Umschaltung auch mit der Insert-Taste.
  801.  
  802.                             Autoindent
  803.  
  804. Schaltet den halbautomatischen Einrückmodus um, dh. der Editor geht nach
  805. einem Return unter den Anfang der vorigen Zeile (EIN) oder zurück zum linken
  806. Bildschirmrand. Für die Eingabe "strukturierter" Programmtexte bevorzugt man
  807. den Autoindent-Modus.
  808.  
  809.                            Nächster Text
  810.  
  811. Die Anzeige wechselt auf den nächsten im Speicher befindlichen Text (falls
  812. mehr als einer vorhanden ist). Wenn sich leere Puffer im Speicher befinden
  813. (z.B.  durch  mehrere  -->  "Neu"-  Befehle,  siehe  Datei-Menü),  können  auch
  814. Leeranzeigen erfolgen. Die Texte sind immer zu einem "Ring" verkettet, das
  815. heißt, nach dem letzten Text führt dieser Befehl wieder auf den ersten. Gibt
  816. es nur einen Text, so ist dieser selbst immer sein "nächster Text".
  817.                                    Der GME                                    22
  818. ________________________________________________________
  819.  
  820.  
  821.                             Hintergrund
  822.  
  823. Hat man mehrere Texte im Speicher, so ist das "Durchhangeln"  zu  einem
  824. bestimmten Text recht lästig (siehe auch --> Menü "Texte", das jedoch in der
  825. Version 1.0 noch nicht existiert). Dann kann es vorteilhaft sein, sich jeweils
  826. einen bestimmten Text auf einer  Taste  zu  merken,  so  daß  man  zwischen
  827. Vorder- und Hintergrundtext mit einem Tastendruck hin und herspringen kann.
  828. Zum Umschalten dient eine im Menü angezeigte  Funktions-Taste  (oder  das
  829. Anklicken dieses Befehls).
  830.  
  831. Mit jeder Ausführung des Befehls tauschen die Texte ihre Plätze. Es können
  832. sich jedoch mehrere Texte (TextA, TextB, TextC, TextD usw.) im Speicher
  833. befinden. Auf irgendeine Weise muß man daher festlegen, zwischen welchen
  834. beiden  Texten  diese  Schnellumschaltung  erfolgen  soll.  Dabei  gilt  folgende
  835. einfache Regel: Der Text, der im Moment, in dem man den "Hintergrund"-
  836. Befehl eingibt, zu sehen ist, wird in den Hintergrund übernommen. Der zuletzt
  837. als "Hintergrund" übernommene Text gelangt zur Anzeige. Ist das nicht der
  838. gewünschte Text,  sucht  man  diesen  einfach  durch  mehrfache  Eingabe  des
  839. "Nächster Text"- Befehls. Erneute Eingabe des Hintergrund-Befehls führt dann
  840. auf den vorigen Text zurück.
  841.  
  842.                           Block einrücken
  843.  
  844. Dies ist ein etwas ungewöhnlicher Befehl. Er geht davon aus, daß man zuvor
  845. einen Block markiert hat (siehe  -->  Block-Menü  oben).  Der  (noch  hervor~
  846. gehobene) Block kann nun in einer tabellarischen Weise bearbeitet werden, dh.
  847. jedes eingegebene oder gelöschte Zeichen wirkt sich auf eine ganze Spalte
  848. aus, die so lang ist wie der markierte Block. Jederzeit können Sie mit dem
  849. Cursor  nach  rechts  oder  links  fahren.  Gelöschte  Spalten  gehen  verloren.
  850. Beendet wird diese Arbeitsweise mit dem --> "Beenden"-Befehl (Esc(ape)). Am
  851. besten probieren Sie es einmal aus!
  852.                                    Der GME                                    23
  853. ________________________________________________________
  854.  
  855.  
  856. 4.7 Das Programm-Menü
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866. Hier finden Sie die Befehle zusammengefaßt, mit denen der Editor Aktivitäten
  867. des  MM2-Programmiersystems  steuern  kann,  also  einen  Programmtext
  868. übersetzen oder ein Make starten bzw. das fertige Programm anschließend
  869. laufen lassen.
  870.  
  871.                             Compilieren
  872.  
  873. Der Compiler startet. Er übersetzt den vom Editor gerade angezeigten Text
  874. aus dem Arbeitsspeicher (der Text muß also nicht vorher gesichert sein, es
  875. wird die im Speicher befindliche Version übersetzt). Wenn Sie mehrere Texte
  876. im Editor geladen haben, können Sie diese nacheinander übersetzen, indem Sie
  877. vorher mit dem --> "Nächster Text"- oder --> "Hintergrund"-Befehl (siehe
  878. Menü Editieren) den gewünschten Text angesprungen haben.
  879.  
  880.                                Datum
  881.  
  882. Zeigt das vom Betriebssystem vergebene Datum der gerade bearbeiteten Datei
  883. an.  In  diesem  Zusammenhang  ist  interessant,  daß  der  Editor  nach  dem
  884. Compilieren einer Datei (aus dem Speicher) beim nachfolgenden (!) Speichern
  885. der dazu gehörigen Textdatei deren Uhrzeit auf den Zeitpunkt der Übersetzung
  886. zurücksetzt. Anderenfalls würde ein daraufhin aktiviertes Make (das sich am
  887. Datums- und Uhrzeiteintrag von Text- und Codedateien orientiert) die Datei
  888. nochmals übersetzen, was nicht notwendig wäre.
  889.  
  890.                            Ende & Comp.
  891.  
  892. Heißt eigentlich: "Ende und  Compilieren".  Das  heißt,  der  Editor  wird  (nach
  893. automatischem Speichern aller Quellen) verlassen und der Compiler "Offline"
  894. gestartet.  Dies  kann  zum  Beispiel  erforderlich  sein,  wenn  der  verfügbare
  895. Arbeitsspeicher nicht ausreicht, um Editor und Compiler gleichzeitig "resident"
  896. zu halten. Oder auch dann, wenn man im Zusammenhang mit der Übersetzung
  897. den Editor verlassen will.
  898.                                    Der GME                                    24
  899. ________________________________________________________
  900.  
  901.  
  902.                            Ende & Ausf.
  903.  
  904. Wie  -->  "Ende  &  Comp.",  jedoch  mit  anschließenden  Start  des  fertigen
  905. Programms (falls keine Fehler aufgetreten sind).
  906.  
  907.                                Make
  908.  
  909. Sichert alle Dateien automatisch, verläßt den Editor und startet das Make mit
  910. der Default-Make-Datei (siehe Bedienung: Shell, Umgebungsinformationen).
  911.  
  912.                            Make & Ausf.
  913.  
  914. Wie --> "Make"; bei erfolgreicher Übersetzung wird das  fertige  Programm
  915. anschließend gestartet.
  916.                                    Der GME                                    25
  917. ________________________________________________________
  918.  
  919.  
  920. 4.8.1 Reine Tastaturbefehle
  921.  
  922. Einige wenige Befehle sind nur über die Tastatur verfügbar - hauptsächlich
  923. wegen ihrer untergeordneten Wichtigkeit. So zum Beispiel das Löschen  von
  924. Blockmarken ohne sonstige Wirkung. Im Abschnitt 5.1 erfahren Sie, wie Sie
  925. die Tastenbelegungen nach Ihrem eigenen Geschmack ändern können.
  926.  
  927.                         Lösche Blockmarken
  928.  
  929. Hebt zuvor gesetzte Blockmarken auf, die Hervorhebung verschwindet wieder.
  930. Standardmäßig auf ^KH.
  931.  
  932.                             Lösche Wort
  933.  
  934. Löscht vorwärts vom Cursor bis zur nächsten Wortgrenze. Eine Wortgrenze
  935. definiert  sich  weitestgehend  nach  den  syntaktischen  Regeln  einer  höheren
  936. Programmiersprache,  d.h.  Leerzeichen,  Kommata,  Semikolons,  Punkte  etc.
  937. bilden Wortgrenzen. Standardmäßig auf ^T und auf sDelete.
  938.  
  939.                             Merke Zeile
  940.  
  941. Merkt sich die Zeile, in welcher der Cursor gerade steht, in einem besonderen
  942. Speicher. Die Zeile kann durch --> "Zeile kopieren" oder --> "Zeile rückholen"
  943. an eine andere Stelle oder in einen anderen Text kopiert werden. Home-Taste.
  944.  
  945.                            Lösche Zeile
  946.  
  947. Löscht und merkt sich die Zeile, in welcher der Cursor gerade steht, in einem
  948. besonderen  Speicher.  Die  Zeile  kann  durch  -->  "Zeile  kopieren"  oder  -->
  949. "Zeile rückholen" an eine andere Stelle oder in einen anderen Text kopiert
  950. werden. ^Y und sClr.
  951.  
  952.                          Zeile wie vorher
  953.  
  954. Dieser  Befehl  wirkt  nur,  solange  man  eine  Zeile,  in  der  Veränderungen
  955. vorgenommen wurden, nicht verlassen oder einen Befehl eingegeben hat. Unter
  956. diesen Voraussetzungen wird der alte Zustand der Zeile wieder hergestellt.
  957. Undo-Taste.
  958.  
  959.                           Zeile kopieren
  960.  
  961. Fügt bei der aktuellen Cursorposition eine vorher mit --> "Merke Zeile" oder
  962. "Lösche Zeile" gemerkte Zeile ein. sUndo.
  963.                                    Der GME                                    26
  964. ________________________________________________________
  965.  
  966.  
  967.                           Zeile rückholen
  968.  
  969. Holt eine Zeile aus dem "Zeilenstack" und fügt sie bei der aktuellen Cursor~
  970. position ein. Der Zeilenstack wird durch den wiederholt ausgeführten Befehl
  971. -->  "Lösche  Zeile"  oder  -->  Wirkung.  einfach  Undo,  wenn  Undo  zum
  972. zweitenmal  gedrückt  wird  oder  vorher  die  aktuelle  Zeile  nicht  verändert
  973. worden war. D.h. Undo bewirkt immer zuerst ein "Zeile wiederherstellen" und
  974. dann ein "Zeile rückholen". Wenn der Zeilenstack leer ist, hat die Taste keine
  975. Wirkung.
  976.  
  977.  
  978. 4.8.2 Cursor-Befehle
  979.  
  980. Die verschiedenen Cursorbefehle erscheinen nicht in einem eigenen Menü, da
  981. sie sehr leicht merkbar über die dafür vorgesehen Pfeiltasten in Kombination
  982. mit Shift und Control sowie teilweise auch mit der Maus ausführbar sind.
  983.  
  984. Alle Cursorbewegungen folgen  dem  Prinzip  der  "Dramatisierung".  Damit  ist
  985. folgendes  gemeint:  Die  Taste  Pfeil-nach-links  bewegt  den  Cursor  um  ein
  986. Zeichen  nach  links.  Zusammen  mit  der  Shift-  Taste  wird  der  Befehl
  987. "dramatischer" - der Cursor springt um ein  Wort  nach  links.  Mit  Control
  988. schließlich springt er an den Anfang der Zeile.
  989.  
  990. Pfeil  nach  oben  bewirkt  ensprechend  den  Sprung  um  eine  Zeile,  einen
  991. Bildschirm nach oben oder an den Anfang der Datei.
  992.  
  993.                   Zeichen nach links, nach rechts
  994.  
  995. Links- oder Rechtspfeil, auch ^S oder ^D.
  996.  
  997.                       Wort links, Wort rechts
  998.  
  999. Cursor springt um ein Wort nach links, Cursor springt um ein Wort nach
  1000. rechts. Beide Befehle können mit Shift und der Links- bzw. Rechtspfeiltaste
  1001. ausgelöst werden, oder mit den Wordstar- Kombinationen ^A, ^F.
  1002.  
  1003.                     Zeilenanfang und Zeilenende
  1004.  
  1005. Cursor springt zum Anfang oder Ende der Zeile. Befindet er sich schon dort,
  1006. geht er zum Ende der vorigen bzw. Anfang der nächsten Zeile. Auslösung auch
  1007. mit Control-Links oder Rechtspfeil und mit ^QS, ^QD.
  1008.  
  1009.                   Seite nach oben und nach unten
  1010.  
  1011. Mit Shift-Pfeil-nach-oben oder nach-unten auslösbar sowie ^R und ^C.
  1012.                                    Der GME                                    27
  1013. ________________________________________________________
  1014.  
  1015.  
  1016.                       Zum Textanfang/Textende
  1017.  
  1018. Mit Control-Pfeil-nach-oben oder nach-unten auslösbar sowie ^QR, ^QC.
  1019.  
  1020.                    Hochrollen bzw. Runterrollen
  1021.  
  1022. Will man erreichen, daß beim Scrollen der Cursor in seiner alten Textzeile
  1023. bleibt (und entsprechend mit nach oben oder unten rückt) klickt man in die
  1024. Statuszeile oder ganz nahe an den unteren Bildschirmrand. Eine entsprechende
  1025. Wirkung hat es, wenn man ganz nah an den rechten oder linken Bildschirmrand
  1026. klickt (oder wenn der Cursor diese überschreitet). WS-Kombinationen (WS:
  1027. Word-Star) sind ^W und ^Z.
  1028.                                    Der GME                                    28
  1029. ________________________________________________________
  1030.  
  1031.  
  1032. 5.1 Tastatur konfigurieren
  1033.  
  1034. Die Tastatur des GME  kann,  was  die  Befehle  betrifft,  beliebig  konfiguriert
  1035. werden.  Dazu  muß  der  Quelltext  des  Moduls  GMEConfig  ("GMECONFI.I")
  1036. verändert und neu compiliert werden.
  1037.  
  1038. Am Ende des Moduls finden Sie den Prozeduraufruf:
  1039.  
  1040.      InitTastatur (Tastatur);
  1041.  
  1042. Diese Prozedur richtet die sogenannten Tastaturebenen ein. Eine Tastaturebene
  1043. ist zum Beispiel die ganze Tastatur, eine zweite die ganze Tastatur mit Shift,
  1044. eine dritte die ganze Tastatur mit Control usw. Auch die Kombinationen der
  1045. Statustasten, wie Shift+Control, Shift+Alternate, bilden eigene Ebenen. Durch
  1046. Ausnutzung  aller  Kombinationen  wäre  es  möglich,  alle  Tasten  16fach  zu
  1047. belegen, das wird jedoch nicht ausgenutzt.
  1048.  
  1049. PROCEDURE InitTastatur (VAR T: eineTastatur);
  1050. VAR     index:  CARDINAL;
  1051. BEGIN
  1052.   FOR index := 0 TO cTastaturEbenen DO
  1053.     NewTastenebene (T  index );
  1054.     InitTastenebene (CAST (einStatus, index), T  index );
  1055.     InitFunktionstasten (CAST (einStatus, index), T  index );
  1056.   END (* FOR *);
  1057.   InitControl (T  CAST (CARDINAL, einStatus  Control ) );
  1058.   InitAlternate (T  CAST (CARDINAL, einStatus  Alternate ) );
  1059. END InitTastatur;
  1060.  
  1061. Die Prozedur ruft ihrerseits "NewTastenebene"  (für  alle  möglichen  Ebenen)
  1062. auf.    Für    unsere    Zwecke    interessant    sind    InitTastenebene    und
  1063. InitFunktionstasten   sowie   die   separaten   Aufrufe   von   InitControl   und
  1064. InitAlternate (außerhalb der FOR- Schleife).
  1065.  
  1066. Um die Arbeitsweise der Tastaturabfrage im GME zu verstehen, müssen wir
  1067. uns  kurz  den  Datentyp  "einTasteneintrag"  ansehen,  der  u.  a.  von  der
  1068. exportierten Universalprozedur "LiesTaste" zurückgegeben wird.
  1069.                                    Der GME                                    29
  1070. ________________________________________________________
  1071.  
  1072.  
  1073.     einTasteneintrag = RECORD
  1074.                           CASE TT: einTastenTyp OF
  1075.                             keineTaste:    |
  1076.                             Zeichen:       zch:   CHAR |
  1077.                             Befehl:        bef:   einBefehl |
  1078.                             String:        str:   einLinePointer |
  1079.                             Makro:        mak:  einMakroPointer |
  1080.                             Mausklick:     x, y:  CARDINAL |
  1081.                             Tastenebene:  teb:   einTastaturPointer |
  1082.                           END (* CASE *);
  1083.                         END (* einTasteneintrag *);
  1084.  
  1085.  
  1086. Dieser Varianten-Record teilt zunächst jedem Tasteneintrag einen Typ zu -
  1087. beispielsweise  "Zeichen".  Wichtig  für  uns  sind  die  Typen  "Befehl"  und
  1088. "Tastenebene". Das Legen von Strings auf Tasten (damit könnte man z. B. auf
  1089. Shift-Alternate-M das Wort MODULE etc. legen) ist im GME zur Zeit noch
  1090. nicht implementiert, auch keine Makros - es handelt sich also nur um Voraus~
  1091. deklarationen für künftige Erweiterungen.
  1092.  
  1093. Eine Tastenebene ist eine Liste (Array) von lauter  Tasteneinträgen.  Da  ein
  1094. Eintrag wieder ein Pointer auf eine Tastenebene sein kann, lassen sich die
  1095. Wordstar-   oder   Turbo-(MS-DOS)-Editor-Befehlsfolgen   wie   ^KB,   ^KK
  1096. (Blockmarken setzen) usw. damit realisieren.
  1097.  
  1098. Die ASCII-Zeichen ("A", "B", "a", "b" usw.) werden beim GME nicht über die
  1099. eigene Tastatur-Tabelle des Editors geholt, sondern vom TOS übernommen.
  1100. Das hat den Vorteil, daß die nationalen Zeichensätze mit ihren oft vertauschten
  1101. Sonderzeichen und zum  Teil  auch  Buchstaben  automatisch  richtig  angepaßt
  1102. werden.
  1103.  
  1104. Der tiefere Grund, warum überhaupt eine eigene Tastaturtabelle benutzt wird,
  1105. liegt u. a. darin, daß sich sonst die Cursortasten nicht symmetrisch mit Shift
  1106. und  Control  auswerten  lassen,  da  TOS  hier  leider  ganz  unsystematisch
  1107. vorgeht.
  1108.  
  1109. Die Tasten mit einer durch ihre Aufschrift oder ein Symbol (Pfeil) gekenn~
  1110. zeichneten Funktion, einschließlich F1 bis F10, werden von "InitFunktionstasten"
  1111. belegt.
  1112.  
  1113. Alle Tasten werden im GME mit  einem  Aufzählungstyp  (einKey)  bezeichnet.
  1114. Zusammen  mit  der  Ebene,  die  als  Index  (0..15)  oder  als  Menge  ( Shift,
  1115. Control ,  Alternate  usw.) bezeichnet werden kann, wird ein Tastenanschlag
  1116. vollkommen eindeutig bezeichnet. Es muß nun nur jedem solchen Tasteneintrag
  1117. ein bestimmter Rückgabewert zugeordnet werden.
  1118.                                    Der GME                                    30
  1119. ________________________________________________________
  1120.  
  1121.  
  1122. Man kann beim GME einen Befehl oft auf drei oder vier verschiedene Weisen
  1123. (durch eine Funktionstaste, eine Controltastenfolge, einen Mausklick oder durch
  1124. Anklicken eines Eintrags in der Menüleiste) eingeben. Der Editor selbst merkt
  1125. den Unterschied nicht - die Befehle werden "normiert" an ihn zurückgegeben;
  1126. dazu   dient   der   Aufzählungstyp   "einBefehl"(siehe   auch   die   Prozedur
  1127. InitMenuTabelle,  die  die  Verknüpfung  zwischen  GEM-Menüeinträgen  und
  1128. GME-Befehlen herstellt).
  1129.  
  1130.  
  1131. 5.1.1 Funktionstasten
  1132.  
  1133. Die lokalen Prozeduren "SetzF" (alle Funktionstasten F1 bis F10) und SetzC
  1134. (alle  Tasten  von  Esc  bis  Cursor-Rechtspfeil  -  genaue  Zuordnung  siehe
  1135. Definition   im   Programmtext)   setzen   in   einer   an   "InitFunktionstasten"
  1136. übergebenen Tastaturebene die betreffenden Tasten.
  1137.  
  1138.   IF (keyStatus = einStatus   )
  1139.   OR (keyStatus = einStatus  Caps ) THEN
  1140.     SetzF (SuchString, StriTausch, PickWort, WeitSuch, nothing,
  1141.            Paste, zurAMark, zurEMark, zur1Mark, zur2Mark);
  1142.     SetzC (Quit, tabulator, DelLChar, DelRChar, return,
  1143.            help, RestoreCurrentLine,
  1144.            insert, cursup, PopCopyLine,
  1145.            cursleft, cursdown, cursright);
  1146.   ELSIF (keyStatus = einStatus  Shift )
  1147.   OR (keyStatus = einStatus  Shift, Caps ) THEN
  1148.     SetzF (SuchWort, WortTausch, PickTausch, zuNrZeile, QueryError,
  1149.            CopyToClipboard, setAMark, setEMark, set1Mark, set2Mark);
  1150.     SetzC (QuitCompile, backtab, DelLWort, DelRWort, return,
  1151.            EditBlock, CopyLastBufferLine,
  1152.            indent, Seitup, PopDeleteLine,
  1153.            Wortleft, Seitdown, Wortrigt);
  1154.  
  1155. Diese  (InitFunktionsTasten  entnommene)   Anweisungsfolge   bestimmt   zum
  1156. Beispiel, daß auf der Taste F1 ohne Shift, aber mit oder ohne CapsLock, der
  1157. Befehl "SuchString" sitzt, auf F2 StriTausch usw. Mit Shift sind es dagegen
  1158. die Befehle "SuchWort" und "WortTausch". Leicht zu erkennen ist auch die
  1159. Belegung der Cursortasten ohne und mit Shift. Um die Belegung zu ändern,
  1160. braucht man nur die bei den Aufrufen eingesetzten Befehlsnamen zu ändern
  1161. (Beachten Sie, daß eine Belegung der  Cursortasten  mit  Alternate-Kombina~
  1162. tionen wirkungslos ist, da der Tastaturprozessor diese bereits in simulierte
  1163. Mausbewegungen umwandelt).
  1164.                                    Der GME                                    31
  1165. ________________________________________________________
  1166.  
  1167.  
  1168. 5.1.2 Alternate- und Controltasten
  1169.  
  1170. Sehr einfach zu verstehen ist die Belegung der Alternate-Tastenkombinationen:
  1171.  
  1172. PROCEDURE InitAlternate (T: einTastaturPointer);
  1173. BEGIN
  1174.   SetControl (T, Ta,  QuitCompileRun); (* Speichern und RETURN 4 *)
  1175.   SetControl (T, Tc,  QuitCompile); (* = Compilieren aus d. Editor! *)
  1176.   SetControl (T, Td,  Compile); (* Im Speicher compilieren *)
  1177.   SetControl (T, Tm,  Make); (* RETURN 3 *)
  1178.   SetControl (T, Tr,  MakeExec); (* Quit Return 4 *)
  1179.   SetControl (T, Tt,  ZeitUndDatum);
  1180.   SetControl (T, Tx,  ExitEditor);
  1181. END InitAlternate;
  1182.  
  1183.  
  1184. Dies wird zusammen mit dem Aufruf verständlich:
  1185.  
  1186.   InitAlternate (T  CAST (CARDINAL, einStatus  Alternate ) );
  1187.  
  1188. Der Prozedur wird die Tastenebene "Alternate" übergeben. Es sind nur einige
  1189. Alternate-Kombinationen  belegt,  Sie  könnten  in  die  Prozedur  noch  weitere
  1190. eintragen, etwa auch, um die Tasten F1 bis F10 mit Alternate zu belegen, falls
  1191. Sie das wünschen.
  1192.  
  1193. Die Controltasten-Belegungen sind etwas komplizierter.
  1194.  
  1195. Sehen Sie sich die relativ lange Prozedur InitControl  im  Quellcode  an.  Sie
  1196. enthält für jede Taste einen Aufruf, die meisten sind SetControl-Aufrufe (wie
  1197. in InitAlternate), die direkt einen Befehl auf die Taste legen - zum Beispiel
  1198. Cursleft auf ^S:
  1199.  
  1200.   SetControl (T, Ts,  cursleft);
  1201.  
  1202. Bei der Taste K (wie auch bei Q und O) finden wir einen anderen Prozedur~
  1203. aufruf, der eine ganze Tastenebene, also eine Folge von zwei nacheinander zu
  1204. betätigenden Tasten, einrichtet. Stellvertretend ist hier nur der  Anfang  von
  1205. "CtrlKEbene" wiedergegeben:
  1206.  
  1207. PROCEDURE CtrlKEbene (t: einTastaturPointer; k: einKey);
  1208. BEGIN
  1209.   NewTastenebene (t^  k .teb); t^  k .TT := Tastenebene;
  1210.   InitTastenebene (einStatus   , t^  k .teb);
  1211.   WITH t^  k  DO
  1212.     SetControl (teb, T1, set1Mark);
  1213.     SetControl (teb, T2, set2Mark);
  1214.     SetControl (teb, T3, set3Mark);
  1215.                                    Der GME                                    32
  1216. ________________________________________________________
  1217.  
  1218.  
  1219. Die ersten drei Anweisungen initialisieren eine neue  Tastenebene  -  das  ist
  1220. wichtig,  falls  Sie  selbst  Prozeduren  schreiben  wollen,  um  beispielsweise
  1221. abweichend auf ^M eine eigene Ebene einzurichten. Der zweite Parameter der
  1222. Prozedur ist die Taste, auf der die Ebene eingerichtet werden soll. Unter der
  1223. WITH-Anweisung folgen dann die Befehlseinträge für die jeweils als zweite zu
  1224. betätigende Taste. Also ^K1 um die Marke 1 zu setzen.
  1225.  
  1226.  
  1227. 5.1.3 Resourcefile - Menüleiste
  1228.  
  1229. Wenn  Sie  das  Resource-File  verändern,  müssen  Sie  die  vom  Resource-
  1230. Construction-Programm ausgegebenen Konstanten in den Anfang des Moduls
  1231. kopieren  (unter  dem  entsprechenden  Kommentar)  und  eventuell  auch  die
  1232. Prozedur  InitMenuTabelle  ändern.  Beachten  Sie,  daß  eventuell  die  darüber
  1233. stehende Konstante "cMaxMenu" für die Anzahl der  Menü-Befehle  geändert
  1234. werden muß. So können Sie  sich  auch  die  GEM-Menüleiste  und  damit  die
  1235. Bedienung des Editors über diese nach Belieben selbst festlegen
  1236.                                    Der GME                                    33
  1237. ________________________________________________________
  1238.  
  1239.  
  1240. 5.2 Editor mit/ohne GME.GME konfigurieren
  1241.  
  1242. Der  GME  wählt  beim  erstmaligen  Start  eine  bestimmte  Voreinstellung,
  1243. beispielsweise, ob er im Überschreib- oder Einfügemodus arbeitet, ob wort-
  1244. oder musterweise gesucht wird etc. Diese Einstellungen nimmt die Prozedur
  1245. "InitConfig" vor, die sich ebenfalls im Modul  GMEConfig  befindet.  In  dieser
  1246. Prozedur finden Sie zwei Beispiele für die Initialisierung von Betriebsweisen
  1247. (eines auskommentiert):
  1248.  
  1249. (* Beispiel 1: Automatisch einrücken ein, BAK-Datei erzeigen ein *)
  1250. Modus := Moden  ControlZeichen, AutoIndent, TabFiltern, MakeBAK ;
  1251.  
  1252. (* Beispiel 2: Außerdem Konfiguration laden u. zu Texten speichern: *)
  1253. Modus := Moden  ControlZeichen, AutoIndent, TabFiltern, MakeBAK,
  1254.                    KonfigSpeichern ;
  1255.  
  1256. Sie  können  beliebige  der  Flag-Konstanten  aus  dem  Aufzählungstyp  "Mode"
  1257. verwenden. Die restlichen Zuweisungen in der Prozedur sollten tunlichst nicht
  1258. verändert werden.
  1259.  
  1260. Die Arbeitsweise ist so: Zunächst wird ein zentraler Puffer angelegt, der die
  1261. Standardkonfiguration  enthält  (ConfigInit  ist  FALSE).  Wenn  (anschließend)
  1262. ConfigInit TRUE ist, werden später angelegte Textpuffer durch Kopieren der
  1263. Werte aus dem ConfigPuffer initialisiert.
  1264.  
  1265. Wenn  im  ConfigPuffer,  also  im  oberen  Teil  der  Prozedur,  das  Flag
  1266. "KonfigSpeichern" eingefügt wurde, so lädt der Editor jedoch beim Starten die
  1267. Datei GME.GME, die individuelle Voreinstellungen enthält, die sich auch nach
  1268. Verändern abspeichern lassen (--> 4.2 Konfiguration sichern). Außerdem wird
  1269. dann zu jeder Textdatei eine GME-Datei mit diesem Record gespeichert, der
  1270. zusätzlich auch die aktuelle Postion des Cursors und der Suchmarken enthält.
  1271. Diese Einstellung kann während der Sitzung mit dem Editor auch individuell
  1272. verändert werden.
  1273.                                    Der GME                                    34
  1274. ________________________________________________________
  1275.  
  1276.  
  1277. Johannes Leckebusch
  1278.  
  1279. Besonderer  Dank  an  Hartwig  Constien  und  Peter  Hellinger,  meine  beiden
  1280. "Weggefährten" während der Entwicklung des G2E, von dem der GME "nur"
  1281. eine Untermenge (mit eigenen Erweiterungen) ist. Unvergesslich wird uns die
  1282. Grillparty bleiben, auf der wir uns, nachdem wir uns seit Monaten bzw. Jahren
  1283. über die "MAUS"-Mailbox kannten, zum erstenmal von Angesicht zu Angesicht
  1284. sahen.
  1285.  
  1286. Ohne diese und manche andere Freunde wäre der Editor nie geworden, was er
  1287. heute ist. Erwähnen muß ich auch Wolfgang Huber, der mich Jahre zuvor -
  1288. vergeblich - warnte: "Nun fang bloß nicht an, einen eigenen Editor zu program~
  1289. mieren"  -  genau  das  hat  mich  nämlich  die  folgenden  Jahre  überwiegend
  1290. beschäftigt und von anderen, vielleicht wichtigeren (?) Tätigkeiten abgehalten.
  1291. Schließlich danke ich den Lesern gewisser Zeitschriften, die mir all die Jahre
  1292. die  Treue  gehalten  haben  und  die  sich  nach  so  langer  Zeit  immer  noch
  1293. sporadisch nach einer alten oder neuen Fassung des "TLGE" erkundigen. Ihnen
  1294. sei an dieser Stelle versichert: Der TLGE lebt - wenn er jetzt auch G2E heißt.
  1295. Näheres wird sehr bald zu hören oder zu lesen sein!
  1296.  
  1297. Schließlich danke ich Thomas Tempelmann alias "TT" für seinen Auftrag, der
  1298. zur ersten "kommerziellen" Version der Golem-Editor-Familie geführt hat. Und
  1299. Arnd Beißner und Julian Reschke für ihre  nimmermüde  Kritik  an  einem  so
  1300. penetranten GEM-Ignoranten, wie ich einer bin, und wem noch alles? Wen ich
  1301. vergessen habe, der fühle sich ebenfalls bedankt!
  1302.